#define _CRT_SECURE_NO_WARNINGS
//第30讲：双向链表专题
// 
//开始之前我们要知道链表的分类:8种(2*2*2)
//带头		不带头
//单向		双向
//循环		不循环
//我们之前学的单链表就是不带头单向不循环链表
//今天学的双链表是带头双向循环链表

//1. 双向链表的结构
//哨兵位”存在的意义：
//遍历循环链表避免死循环。

//2. 双向链表的实现
#include"List.h"
void Test01()
{
	ListNode* plist = NULL;
	LTInit(&plist);

	//测试尾插:
	LTPushBack(plist, 3);
	LTPushBack(plist, 4);
	LTPushBack(plist, 5);
	LTPrint(plist);

	//测试头插:
	LTPushFront(plist, 2);
	LTPushFront(plist, 1);
	LTPrint(plist);

	////测试尾删:
	//LTPopBack(plist);
	//LTPopBack(plist);
	//LTPrint(plist);

	////测试头删:
	//LTPopFront(plist);
	//LTPrint(plist);

	//测试在指定位置之后插入数据:
	LTInsertAfter(plist, 5,114514);
	LTPrint(plist);

	//测试在指定位置之前插入数据:
	LTInsertBefore(plist, 6, 114514);
	LTPrint(plist);

	//测试查找:
	ListNode*ret=LTFind(plist, 114514);
	if (ret == NULL)
		printf("没找到\n");
	else
		printf("找到了!\n");

	//测试删除指定位置节点:
	LTErase(plist, 6);
	LTPrint(plist);
	LTErase(plist, 6);
	LTPrint(plist);

	//测试销毁:
	LTDestroy(&plist);
	if (plist == NULL)
	{
		printf("NULL");
	}

}

int main()
{
	Test01();
	return 0;
}